
//push constant 0
@SP
A=M
M=0
@SP
M=M+1

//pop local 0         
@SP
M=M-1
A=M
D=M
@LCL
A=M
M=D

//label LOOP_START
(BasicLoop$LOOP_START)

//push argument 0
@ARG
AD=M
D=M
@SP
A=M
M=D
@SP
M=M+1

//push local 0
@LCL
AD=M
D=M
@SP
A=M
M=D
@SP
M=M+1

//add
@SP
M=M-1
A=M
D=M
@SP
M=M-1
A=M
D=D+M
@SP
A=M
M=D
@SP
M=M+1

//pop local 0	        
@SP
M=M-1
A=M
D=M
@LCL
A=M
M=D

//push argument 0
@ARG
AD=M
D=M
@SP
A=M
M=D
@SP
M=M+1

//push constant 1
@SP
A=M
M=1
@SP
M=M+1

//sub
@SP
M=M-1
A=M
D=M
@SP
M=M-1
A=M
D=M-D
@SP
A=M
M=D
@SP
M=M+1

//pop argument 0      
@SP
M=M-1
A=M
D=M
@ARG
A=M
M=D

//push argument 0
@ARG
AD=M
D=M
@SP
A=M
M=D
@SP
M=M+1

//if-goto LOOP_START  
@SP
AM=M-1
D=M
@BasicLoop$LOOP_START
D;JNE

//push local 0
@LCL
AD=M
D=M
@SP
A=M
M=D
@SP
M=M+1